Mã giả Sắp xếp trộn

Mã giả ngắn gọn

procedure mergesort(l,r: integer);var i, j, k, m: integer;begin     if r>l then         begin             m:=(r+l)shr 1;             mergesort(l,m); mergesort(m+1,r);            for i:= m downto l do b[i]:=a[i];            for j:=m+1 to r do b[r+m+1-j]:=a[j];            for k:=l to r do                 if b[i] < b[j] then                     begin a[k]:=b[i]; i:=i+1 end                else                     begin a[k]:=b[j]; j:=j-1 end;        end;end;

Trộn tại chỗ

Procedure Merge(k1,k2,k3:integer); Var i,j,k:integer;           T: array[k1..k3] of integer;Begin   i:=k1;   j:=k2;   k:=k3;  while i<k2 and j<=k3 do   Begin     if a[i]<=a[j] then  begin         T[k]:=a[i];         i:=i+1;       End       else  begin         T[k]:=a[j];         j:=j+1;       End;    k:=k+1;   End;   if i>=k2 then        while k<=k3 do begin           T[k]:=a[j];           j:=j+1;           k:=k+1;       End   if j>k3 then        while k<k2 do begin           T[k]:=a[i];           i:=i+1;           k:=k+1;       End    For k:=k1 to k3          a[k]:=T[k];End

Trộn từ dưới lên

Procedure MergeSortUp (a[1..n]) Var Int m,i {   m=1   while m<n {     k=0     while k+m<=n {       merge(a,k+1,k+m+1,Min[k+2m,n])       k=k+2m     }     m=2*m   } }

Trộn đệ quy

Procedure MergeSort (k1,k2) Var k3:integer; Begin   if k1<k2 then begin       k3:=(k1+k2)/2;       MergeSort(k1,k3);       MergeSort(k3+1,k2);          Merge(k1,k3,k2);     End; End;

Ngôn ngữ C++

void merge(int array[], int first, int middle, int last) {    int temp[last + 1];    int first1, last1, first2, last2;    int index = first;	    first1 = first;    last1 = middle;    first2 = middle+1;    last2 = last;	    while((first1 <= last1) && (first2 <= last2)) {	if(array[first1] < array[first2]) {	    temp[index] = array[first1];            index ++;            first1 ++;				} else {	    temp[index] = array[first2];	    index ++;	    first2 ++;	}    }         if(first2 > last2) {        while(first1 <= last1) {            temp[index] = array[first1]; 	    index ++;	    first1 ++;        }    }    if(first1 > last1) {        while(first2 <= last2) {             temp[index] = array[first2];	     index ++;	     first2 ++;        }    }			    for(int i = first; i <= last; i ++) {        array[i] = temp[i - first];    }	    return;}void mergeSort(int array[], int first, int last) {    if(first < last) {        int middle = int((first + last) / 2);     	mergeSort(array, first, middle);	mergeSort(array, middle + 1, last);	merge(array, first, middle, last);    }}

Liên quan